package com.bot.nft.module.chain.service.impl;

import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bot.nft.core.enums.chain.ChainLogEnum;
import com.bot.nft.module.chain.domain.ChainOptLogInfo;
import com.bot.nft.module.chain.mapper.ChainOptLogMapper;
import com.bot.nft.module.chain.service.ChainOptLogServer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
@Slf4j
public class ChainOptLogServerImpl extends ServiceImpl<ChainOptLogMapper, ChainOptLogInfo> implements ChainOptLogServer {

    @Resource
    public ChainOptLogMapper chainOptLogMapper;

    /**
     * 添加链操作日志
     *
     * @param chainOptLogInfo 日志信息
     * @return 添加成功、true/失败、false
     */
    @Override
    public Boolean insertCPLog(ChainOptLogInfo chainOptLogInfo) {
        String snowflakeNextIdStr = IdUtil.getSnowflakeNextIdStr();
        chainOptLogInfo.setId(snowflakeNextIdStr);
        int insert = chainOptLogMapper.insert(chainOptLogInfo);
        return insert > 0;
    }

    /**
     * 修改链操作日志
     *
     * @param chainOptLogInfo 日志信息
     * @return 修改成功、true/失败、false
     */
    @Override
    public Boolean updateCPLog(ChainOptLogInfo chainOptLogInfo) {
        int update = chainOptLogMapper.updateById(chainOptLogInfo);
        return update > 0;
    }

    /**
     * 查询操作未成功的日志
     *
     * @return 日志信息*
     */
    @Override
    public List<ChainOptLogInfo> queryCOL(Integer status) {
        QueryWrapper<ChainOptLogInfo> chainOptLogInfoQW = new QueryWrapper<>();
        LambdaQueryWrapper<ChainOptLogInfo> lambda = chainOptLogInfoQW.lambda();
        if (status != null) {
            lambda.ne(ChainOptLogInfo::getStatus, status);
        } else {
            lambda.ne(ChainOptLogInfo::getStatus, ChainLogEnum.SUCCEEDSTATUS.getValue());
        }
        List<ChainOptLogInfo> chainOptLogInfos = chainOptLogMapper.selectList(chainOptLogInfoQW);
        return chainOptLogInfos;
    }

    /**
     * 查看操作日志
     * @param operationId 操作标识
     * @return 日记信息
     */
    @Override
    public ChainOptLogInfo getCOL(String operationId) {
        QueryWrapper<ChainOptLogInfo> chainOptLogInfoQW = new QueryWrapper<>();
        chainOptLogInfoQW.lambda().eq(ChainOptLogInfo::getOperationId, operationId);
        return chainOptLogMapper.selectOne(chainOptLogInfoQW);
    }
}